<?php

/**
 * <b>DELETE</b>
 * Classe responsavel por exclusoes genericas no banco de dados.
 * @copyright (c) year, Romulo B. Bosco 
 */
class Delete extends Conn {
    
    /**
     *
     * @var STRING
     */
    private $Tabela;
    
    /**
     * CONDICOES DE ATUALIZACAO
     * @var STRING
     */
    private $Termos;

    /**
     * FARA OS BIND VALUES
     * @var ARRAY
     */
    private $Places;
    
    /**
     * IMPRIME OS RESULTADOS
     * @var 
     */
    private $Result;

    /** 
     * O ATRIBUTO DE PDOSTATEMENT TERA SEMPRE O NOME DA CLASSE
     * @var PDOStatement 
     */
    private $Delete;

    /** @var PDO */
    private $Conn;
    
    /**
     * 
     * @param type $Tabela = NOME DA TABELA
     * @param type $Termos = CONDICOES DE LEITURA. NAO PODE SER REQUISITADO. $Termos = null.
     * @param type $ParseString = SUBSTITUI OS LINKS PELO PREPARESTATEMENT
     */
    public function ExeDelete($Tabela, $Termos, $ParseString) {
        $this->Tabela = (string) $Tabela;
        $this->Termos = (string) $Termos;
        
        parse_str($ParseString, $this->Places);
        $this->getSyntax();
        $this->Execute();
    }
    
    /**
     * RESULTADO DA QUERY EM FETCH_ASSOC
     * @return ARRAY
     */
    public function getResult() {
        return $this->Result;
    }
    
    /**
     * RETORNA A QUANTIDADE DE RESULTADO.
     * @return ARRAY
     */
    public function getRowCount() {
        
        //RETORNA O NUMERO DE RESULTADOS
        return $this->Delete->rowCount();
    }
    
    /**
     * PEGA APENAS O $ParseString E EXECUTA O METODO EXECUTE.
     * @param STRING $ParseString
     */
    public function setPlaces($ParseString) {
        parse_str($ParseString, $this->Places);
        $this->getSyntax();
        $this->Execute();
    }
    
    /**
     * ****************************************
     * *********** PRIVATE METHODS ************
     * ****************************************
     */
    
    /**
     * OBTEM A CONEXAO COM O PDO E PREPARA A QUERY.
     */
    private function Connect() {
        $this->Conn = parent::getConn();
        $this->Delete = $this->Conn->prepare($this->Delete);
    }
    
    /**
     * CRIA A SINTAXE DA QUERY PARA PREPARED STATEMENTS
     */
    private function getSyntax() {
        $this->Delete = "DELETE FROM {$this->Tabela} {$this->Termos}";

    }
    
    //OBTEM AS FUNCOES DE CONEXAO E DE SYNTAX, EXECUTA A QUERY.
    private function Execute() {
        $this->Connect();
        try{
            $this->Delete->execute($this->Places);
            $this->Result = TRUE;
        } catch (PDOException $ex) {
            $this->Result = null;
            WSErro("<b>Erro ao DELETAR:</b> {$ex->getMessage()}", $ex->getCode());
        }
    }

}
